<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>变量的提升</title>
</head>

<body>
    <p>变量提升是 JavaScript 中比较“奇怪”的现象，它允许在变量声明之前即被访问</p>

    <p>
        总结：<br>

        1. 变量在未声明即被访问时会报语法错误<br>
        2. 变量在声明之前即被访问，变量的值为 undefined<br>
        3. let 声明的变量不存在变量提升，推荐使用 let<br>
        4. 变量提升出现在相同作用域当中<br>
        5. 实际开发中推荐先声明再访问变量<br>

        注：关于变量提升的原理分析会涉及较为复杂的词法分析等知识，而开发中使用 let 可以轻松规避变量的提升，因此在此不做过多的探讨，有兴趣可查阅资料。

    </p>
    <script>
        // 访问变量str
        console.log(str + ' world!');

        // 声明变量 str
        var str = 'hello '

    </script>
</body>

</html>